/* ==================================================================   
 * Created [2009-4-27 下午11:32:55] by Jon.King 
 * ==================================================================  
 * TSS 
 * ================================================================== 
 * mailTo:jinpujun@hotmail.com
 * Copyright (c) Jon.King, 2009-2012 
 * ================================================================== 
*/

package com.jinhe.tss.core.cachepool.container;

import java.util.List;

import com.jinhe.tss.core.cachepool.Cacheable;
import com.jinhe.tss.core.cachepool.CacheableKey;
import com.jinhe.tss.core.cachepool.IArithmetic;


/** 
 * <p> Collection.java </p> 
 *
 * 缓存池的池容器接口.</p><p>
 * 该接口中定义了池的基本操作.</p><p>
 * 用户可以通过实现该接口来自定义池容器的实现.</p><p>
 * 
 * @author Jon.King 2006-12-31
 */

public interface IPoolContainer {
    
    //对象池容器访问方式
    
    /** 先进先出 */
    static final int ACCESS_FIFO = 1; 
    
    /** 后进先出 */
    static final int ACCESS_LIFO = 2; 
    
    /** 随机 */
    static final int ACCESS_RANDOM = 3; 
    
    /** 最近使用 */
    static final int ACCESS_LRU = 4; 
    
    /** 最不常使用 */
    static final int ACCESS_LFU = 5; 
    
    /**
     * 从池容器里获取一个对象
     * @param key
     * @return
     */
    Cacheable get(Object key);
    
    /**
     * 根据缓存池中缓存策略设定的对象访问方式（共有以上所列5种）来获取缓存池中的一个对象。</p><p>
     * 本方法主要在缓存算法类中执行check-out()和remove()方法时候会被调用到。</p><p>
     * 
     * @param accessMethod
     * @return
     * @see IArithmetic 
     */
    Cacheable getByAccessMethod(int accessMethod);

    /**
     * 往池容器中存入一个对象
     * @param key
     * @param value
     * @return
     */
    Cacheable put(Object key, Cacheable value);
    
    /**
     * 从池容器中清除一个对象
     * @param key
     * @return
     */
    Cacheable remove(Object key);
    
    Cacheable removeByAccessMethod(int accessMethod);
    
    /**
     * 获取池容器中的所有key列表
     * @return
     */
    List<CacheableKey> getKeys();
    
    List<Cacheable> getValues();
    
    /**
     * 获取池中元素的个数
     * @return
     */
    int size();
    
    /**
     * 清空池容器
     */
    void clear();
}

